// 14. 最长公共前缀 https://leetcode-cn.com/problems/longest-common-prefix/
/**
 * 14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀，返回空字符串 ""。

 

示例 1：

输入：strs = ["flower","flow","flight"]
输出："fl"
示例 2：

输入：strs = ["dog","racecar","car"]
输出：""
解释：输入不存在公共前缀。
 * 
 */
// 横向扫描 也可以想起 版本比较的算法题，第一个和第二个比较，再拿结果和第三个比较
const longestCommonPrefix = (strs) => {
    if (strs.length === 0) {
      return ''
    }
  
    let prefix = strs[0]
    const len = strs.length
    const getPrevfix = (str1, str2) => {
      if (str1.length > str2.length) {
        return getPrevfix(str2, str1)
      }
  
      let i = 0
      let substrLen = 0
      const len = str1.length
  
      while (i < len) {
        if (str1[ i ] === str2[ i ]) {
          substrLen++
        } else {
          break
        }
        i++
      }
  
      return str1.substr(0, substrLen)
    }
  
    for (let i = 1; i < len; i++) {
      prefix = getPrevfix(prefix, strs[ i ])
  
      if (prefix === '') {
        return ''
      }
    }
  
    return prefix
  }
  
  console.log(longestCommonPrefix(["flower","flow","flood"]))




  // 方法二 


  function overlap(arr) {
    var result = '';
    var firstTime = true;
    arr.some(function (item) {
        if( typeof item !== 'string') return false;
        if( firstTime ) {  // 考虑了数组第一个元素可能不是字符串的情况
            result = item;
            firstTime = false;
            return false;   // 第一次填充字符串的话后面的代码就不用执行了
        }
        // 筛选出当前遍历字符串与 result 的交集
        result = filterString(result, item);
        // 每次遍历后都判断当前重叠部分是否为空，若为空直接返回
        if( !result ) return true;
    })
    return result;
}

// 比较字符串方法一：将字符串转为数组
// function filterString(str1, str2) {
//     var result = '';
//     var arr1 = str1.trim().split(''),
//         arr2 = str2.trim().split('');
//     arr1.some(function (item, index) {
//         if( item === arr2[index] ){
//             result += item;
//             return false;
//         }
//         return true;
//     });
//     return result;
// }
// 比较字符串方法二：通过字符串下标比较
function filterString(str1, str2) {
    var result = '';
    for( var i = 0; i < str1.length; i++ ){
        if( str1[i] === str2[i] ){
            result += str1[i];
            continue;
        }
        return result;
    }
    return result;  // 当两个比较的字符串一模一样的时候就会走到这里
}


console.log(overlap(["flower","flow","flood"]))